﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Crosland.Automotriz.Logic.Linq;
using Crosland.Automotriz.Core;

namespace Crosland.Automotriz.Web.Repuestos
{
    public partial class wFrmSeguimientoImportacionDocumentos : System.Web.UI.Page
    {
        private clsT_Imp_Importaciones_Doc_RelacionadosLogic listaCargaDoc = null;
        private static List<IMPORTACIONES_DOC_RELACIONADOS> documento = null;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack == false)
            {

                documento = new List<IMPORTACIONES_DOC_RELACIONADOS>();

                this.ListaOrganizacion();
                cboOrganizacion.Value = "2".ToString();

                if (Session["Opcion"] != null)
                {
                    txtNumPedido.Text = Session["NUM_PEDIDO"].ToString();
                    cboOrganizacion.Value = Session["ID_ORG_VTA"].ToString();
                    Session["op"] = "A";
                }
                this.ListaDocumento();

                Session["Opcion"] = null;


            }
        }



        private void ListaOrganizacion()
        {

            List<TD_ORG_VTA> ListarOrgVta = new List<TD_ORG_VTA>();
            clsTd_Org_VtaLogic l = new clsTd_Org_VtaLogic();
            ListarOrgVta = l.lista();

            if (ListarOrgVta == null || ListarOrgVta.Count() == 0)
            {
                lblmsj.Text = "No Hay Datos Para Las Organizaciones.";
                pcMensajeCliente.ShowOnPageLoad = true;
                return;
            }
            cboOrganizacion.DataSource = ListarOrgVta;
            cboOrganizacion.TextField = "DES_ORG_VTA";
            cboOrganizacion.ValueField = "ID_ORG_VTA";
            cboOrganizacion.DataBind();
        }

        private void ListaDocumento()
        {
            String strOpcion = Session["Opcion"] != null ? Session["Opcion"].ToString() : String.Empty;
            if (strOpcion != String.Empty)
            {

                int intIdOrganizacion = cboOrganizacion.Value == null ? 0 : Convert.ToInt32(cboOrganizacion.Value);
                String strNumPedido = Session["NUM_PEDIDO"].ToString();
                listaCargaDoc = new clsT_Imp_Importaciones_Doc_RelacionadosLogic();
                Busca(intIdOrganizacion, strNumPedido);

            }
        }


        private void Busca(int intIdOrganizacion, String strNumPedido)
        {

            listaCargaDoc = new clsT_Imp_Importaciones_Doc_RelacionadosLogic();
            int intTotal = listaCargaDoc.RetornaIdCab(strNumPedido, intIdOrganizacion);
            if (intTotal == 0)
            {
                documento.Clear();
                grdListaDocumentosImportaciones.DataSource = null;
                grdListaDocumentosImportaciones.DataBind();
                lblmsj.Text = "El número pedido ingresado no existe";
                pcMensajeCliente.ShowOnPageLoad = true;
                return;
            }

            Session["idCab"] = intTotal;
            Session["NUM_PEDIDO"] = txtNumPedido.Text.Trim();
            Session["DES_ORG_VTA"] = cboOrganizacion.Text;
            documento = listaCargaDoc.ListarDocumentos(intIdOrganizacion, intTotal);

            if (documento.Count() == 0 || documento == null)
            {

                documento = new List<IMPORTACIONES_DOC_RELACIONADOS>();
                grdListaDocumentosImportaciones.DataSource = null;
                grdListaDocumentosImportaciones.DataBind();
                lblmsj.Text = "No hay documentos relacionados ";
                pcMensajeCliente.ShowOnPageLoad = true;
                return;
            }

            grdListaDocumentosImportaciones.DataSource = documento;
            grdListaDocumentosImportaciones.DataBind();
        }


        private void DocRelacModificar()
        {
            try
            {
                int intIndex = grdListaDocumentosImportaciones.FocusedRowIndex;
                if (intIndex == -1)
                {
                    lblmsj.Text = "Debe seleccionar un documento a modificar.";
                    pcMensajeCliente.ShowOnPageLoad = true;
                    return;
                }

                int? intIdTipo = null;
                long? lngNroDoc = null;
                String strOrgVta, strNumPedido;

                ListaTipoDocumentoImportaciones();


                strOrgVta = documento[intIndex].DES_ORG_VTA;
                strNumPedido = documento[intIndex].NUM_PEDIDO;
                intIdTipo = documento[intIndex].ID_TIPO_DOC_SEG;
                lngNroDoc = documento[intIndex].COD_NRO_DOCUMENTO;

                lblDROrgVta.Text = strOrgVta;
                lblDRNumeroPedido.Text = strNumPedido;
                cboDRTipoDocumento.Value = intIdTipo.ToString();
                txtDRNumeroDocumento.Text = lngNroDoc.ToString();

                PopupDocumento.ShowOnPageLoad = true;
                Session["strGrabDoc"] = "1";
                Session["intIndex"] = intIndex;

            }
            catch (Exception ex)
            {
                lblmsj.Text = "ERROR AL MODIFICAR EL DOCUMENTO" + ex.Message;
                pcMensajeCliente.ShowOnPageLoad = true;
            }
        }

        private void DocEliminar()
        {

            try
            {
                int intIndex = grdListaDocumentosImportaciones.FocusedRowIndex;
                if (intIndex == -1)
                {
                    lblmsj.Text = "Debe seleccionar un documento a eliminar.";
                    pcMensajeCliente.ShowOnPageLoad = true;
                    return;
                }
                documento.RemoveAt(intIndex);
                grdListaDocumentosImportaciones.DataSource = documento;
                grdListaDocumentosImportaciones.DataBind();


            }
            catch (Exception ex)
            {
                lblmsj.Text = "ERROR AL ELIMINAR EL DOCUMENTO " + ex.Message;
                pcMensajeCliente.ShowOnPageLoad = true;
            }

        }



  

        private void DocRelacAgregar()
        {

            try
            {
               
                int? intIdTipoDoc = null, intIdImpRelacion = null;
                String strNumPedido = String.Empty, strDesOrg = String.Empty, strDesTipo = String.Empty;
                long lngNroDoc;

                strNumPedido = txtNumPedido.Text;
                strDesOrg = cboOrganizacion.Text;

                intIdTipoDoc = (cboDRTipoDocumento.Value) != null ? Convert.ToInt32(cboDRTipoDocumento.Value) : Convert.ToInt32(cboDRTipoDocumento.SelectedItem.Value);
                lngNroDoc = (txtDRNumeroDocumento.Text.Trim() != String.Empty) ? Convert.ToInt64(txtDRNumeroDocumento.Text.Trim()) : 0;
                strDesTipo = cboDRTipoDocumento.Text.Trim();
                IMPORTACIONES_DOC_RELACIONADOS objIDR = new IMPORTACIONES_DOC_RELACIONADOS();
                objIDR.ID_T_IMPORTACIONES_RELACION = intIdImpRelacion;
                objIDR.NUM_PEDIDO = strNumPedido;
                objIDR.DES_ORG_VTA = strDesOrg;
                objIDR.COD_NRO_DOCUMENTO = lngNroDoc;
                objIDR.DES_LARGA = strDesTipo;
                objIDR.ID_TIPO_DOC_SEG = intIdTipoDoc;
         


                if (Session["strGrabDoc"].ToString() == "0")
                {
                    documento.Add(objIDR);
                }
                else if (Session["strGrabDoc"].ToString() == "1")
                {
                    int intIndex = Convert.ToInt32(Session["intIndex"]);
                    documento[intIndex] = objIDR;
                }
                cboDRTipoDocumento.Value = null;
                txtDRNumeroDocumento.Text = String.Empty;

                PopupDocumento.ShowOnPageLoad = false;

                grdListaDocumentosImportaciones.DataSource = documento;
                grdListaDocumentosImportaciones.DataBind();


            }
            catch (Exception ex)
            {
                lblmsj.Text = ex.Message;
                pcMensajeCliente.ShowOnPageLoad = true;
               

            }

        }

        private void Grabar()
        {
            try
            {

                if (txtNumPedido.Text.Trim() == "") {
                    lblmsj.Text = "Ingrese el número pedido";
                    pcMensajeCliente.ShowOnPageLoad = true;
                    return;

                }
                else if (cboOrganizacion.Value == null)
                {
                    lblmsj.Text = "Ingrese la organización venta";
                    pcMensajeCliente.ShowOnPageLoad = true;
                    return;


                }

                List<T_IMP_IMPORTACIONES_DOC_RELACIONADOS> impdoc_ent = new List<T_IMP_IMPORTACIONES_DOC_RELACIONADOS>();
                clsImportacionesLogic ImportacionBL = new clsImportacionesLogic();
                listaCargaDoc = new clsT_Imp_Importaciones_Doc_RelacionadosLogic();
                int intItemDoc = 0;
                while (intItemDoc <= (documento.Count() - 1))
                {
                    try
                    {
                        T_IMP_IMPORTACIONES_DOC_RELACIONADOS objImpDoc = new T_IMP_IMPORTACIONES_DOC_RELACIONADOS();
                        objImpDoc.ID_T_IMPORTACIONES_RELACION = 0;
                        //objImpDoc.ID_ORG_VTA = Convert.ToInt32(cboOrganizacion.Value);
                        //objImpDoc.NUM_PEDIDO = Session["NUM_PEDIDO"].ToString();
                        objImpDoc.ID_IMP_IMPORTACION_CAB = Convert.ToInt32(Session["idCab"]);
                        objImpDoc.ID_TIPO_DOC_SEG = Convert.ToInt32(documento[intItemDoc].ID_TIPO_DOC_SEG);
                        objImpDoc.COD_NRO_DOCUMENTO = documento[intItemDoc].COD_NRO_DOCUMENTO;
                        impdoc_ent.Add(objImpDoc);
                        intItemDoc++;
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }

                }


         
                bool DocImp=false;
                DocImp = listaCargaDoc.EliminarDocumentos2(Convert.ToInt32(cboOrganizacion.Value), Convert.ToInt32(Session["idCab"]));
               

                if (DocImp)
                {
                    bool resultado = ImportacionBL.InsertarDocumentos(impdoc_ent);

                    if (resultado)
                    {

                        lblmsj.Text = "Se grabó correctamente";
                        pcMensajeCliente.ShowOnPageLoad = true;
                        return;
                    }
                }
            }
            catch (Exception ex)
            {

                lblmsj.Text = ex.Message;
                pcMensajeCliente.ShowOnPageLoad = true;
            }

        }

        private Boolean ValidarCamposDocImp()
        {
            Boolean boolValidarCamposDocImp = true;
            try
            {
                long lngNroDoc;
                if (cboDRTipoDocumento.Value == null)
                {
                    boolValidarCamposDocImp = false;
                    lblmsj.Text = "Debe seleccionar un tipo de documento.";
                    pcMensajeCliente.ShowOnPageLoad = true;

                }
                else if (txtDRNumeroDocumento.Text.Trim() == String.Empty)
                {
                    boolValidarCamposDocImp = false;

                    lblmsj.Text = "Debe ingresar un numero de documento.";
                    pcMensajeCliente.ShowOnPageLoad = true;
                }
                else if (!long.TryParse(txtDRNumeroDocumento.Text.Trim(), out lngNroDoc))
                {
                    boolValidarCamposDocImp = false;
                    lblmsj.Text = "El numero de documento debe ser numerico.";
                    pcMensajeCliente.ShowOnPageLoad = true;
                }
            }
            catch (Exception ex)
            {
                boolValidarCamposDocImp = false;
                lblmsj.Text = ex.Message;
                pcMensajeCliente.ShowOnPageLoad = true;
            }
            return boolValidarCamposDocImp;
        }

        private void ListaTipoDocumentoImportaciones()
        {
            try
            {
                IEnumerable<Object> lista = new List<Object>();
                lista = new clsT_Imp_Importaciones_Doc_RelacionadosLogic().listaTipoDocumento();

                if (lista == null)
                {
                    lblmsj.Text = "No existen datos para el tipo de documento.";
                    pcMensajeCliente.ShowOnPageLoad = true;
                    return;
                }

                cboDRTipoDocumento.DataSource = lista;
                cboDRTipoDocumento.TextField = "DES_LARGA";
                cboDRTipoDocumento.ValueField = "ID_GENERAL_DET";
                cboDRTipoDocumento.DataBind();

            }
            catch (Exception ex)
            {
                lblmsj.Text = "ERROR AL CARGAR EL TIPO DE DOCUMENTO. " + ex.Message;
                pcMensajeCliente.ShowOnPageLoad = true;

            }
        }

        protected void btnDocNuevo_Click(object sender, EventArgs e)
        {
            if (txtNumPedido.Text.Trim() == String.Empty)
            {
                lblmsj.Text = "Debe ingresar un numero de pedido.";
                pcMensajeCliente.ShowOnPageLoad = true;
                return;
            }

            if (cboOrganizacion.Value == null) {

                lblmsj.Text = "Debe seleccionar organizacion de venta.";
                pcMensajeCliente.ShowOnPageLoad = true;
                return;
            }

            listaCargaDoc = new clsT_Imp_Importaciones_Doc_RelacionadosLogic();
            int intTotal = listaCargaDoc.RetornaIdCab(txtNumPedido.Text.Trim(), Convert.ToInt32(cboOrganizacion.Value));
            if (intTotal == 0)
            {
                lblmsj.Text = "El número pedido ingresado no existe";
                pcMensajeCliente.ShowOnPageLoad = true;
                return;
            }

            Session["idCab"] = intTotal;
            Session["NUM_PEDIDO"] = txtNumPedido.Text.Trim();
            Session["DES_ORG_VTA"] = cboOrganizacion.Text;


            Session["strGrabDoc"] = "0";
            PopupDocumento.ShowOnPageLoad = true;
            txtDRNumeroDocumento.Text = String.Empty;
            cboDRTipoDocumento.Value = null;
            lblDROrgVta.Text = Session["DES_ORG_VTA"].ToString();
            lblDRNumeroPedido.Text = Session["NUM_PEDIDO"].ToString();
            ListaTipoDocumentoImportaciones();

        }

        protected void btnPopDocAgregar_Click(object sender, EventArgs e)
        {
            if (ValidarCamposDocImp())
            {

                this.DocRelacAgregar();
            }
        }

        protected void btnDocEliminar_Click(object sender, EventArgs e)
        {
            this.DocEliminar();
        }

        protected void btnDocModificar_Click(object sender, EventArgs e)
        {
            this.DocRelacModificar();
        }

        protected void grdListaDocumentosImportaciones_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            grdListaDocumentosImportaciones.DataSource = documento;
            grdListaDocumentosImportaciones.DataBind();
        }

        protected void btnBuscar_Click(object sender, EventArgs e)
        {
            Busca(Convert.ToInt32(cboOrganizacion.Value), txtNumPedido.Text.Trim());
        }

        protected void btnGrabar_Click(object sender, EventArgs e)
        {
            this.Grabar();
        }

        protected void btnSalir_Click(object sender, EventArgs e)
        {
            Session["idCab"] = null;
            Session["NUM_PEDIDO"] = null;
            Session["Opcion"] = null;
            if (Session["op"] != null)
            {
                Session["op"] = null;
                Response.Redirect("~/Repuestos/wFrmSeguimientoImportacion.aspx?id=3");
            }
            else
            {

                Response.Redirect("~/Repuestos/wFrmDefault.aspx?id=3");
            }
        }
    }
}